from 翻译包 import *

# 一些常用的数值
INF = 2**32 - 1

# 当我们的网络测量算法要导出一些数据的时候，我们可以指定
# 导出的是一个流标识符还是一个流记录项
标识符导出标志 = 0
流记录导出标志 = 1

# 用于指定当前流标识符和哈希表中的流标识符的比较结果
空置 = 1
匹配 = 2
冲突 = 3

# 使用计数的方式进行导出还是计时的方式进行导出
计数导出 = 0
计时导出 = 1

####
表长1 = 0
表长2 = 0
表长3 = 0
表长4 = 0
表长5 = 0
表长6 = 0
表长7 = 0
表长8 = 0
表长9 = 0

def 配置表长(长度1=0, 长度2=0, 长度3=0, 长度4=0, 长度5=0, 长度6=0, 长度7=0, 长度8=0, 长度9=0):
	global 表长1, 表长2, 表长3, 表长4, 表长5, 表长6, 表长7, 表长8, 表长9
	表长1 = 长度1
	表长2 = 长度2
	表长3 = 长度3
	表长4 = 长度4
	表长5 = 长度5
	表长6 = 长度6
	表长7 = 长度7
	表长8 = 长度8
	表长9 = 长度9

def 配置内存方案(内存方案):
	# HashFlow 
	if "HashFlow:0.2MB" == 内存方案: 
		配置表长(2**12, 2**10, 2**9, 2**12)
	elif "HashFlow:0.4MB" == 内存方案: 
		配置表长(2**13, 2**11, 2**10, 2**13)
	elif "HashFlow:0.5MB" == 内存方案: 
		配置表长(2**13, 2**12, 2**11, 2**13)
	elif "HashFlow:0.6MB" == 内存方案: 
		配置表长(2**13, 2**12, 2**12, 2**14)
	elif "HashFlow:0.8MB" == 内存方案: 
		配置表长(2**14, 2**12, 2**11, 2**14)
	elif "HashFlow:1.0MB" == 内存方案: 
		配置表长(2**14, 2**13, 2**12, 2**14)
	elif "HashFlow:1.2MB" == 内存方案: 
		配置表长(2**14, 2**13, 2**13, 2**15)
	elif "HashFlow:1.6MB" == 内存方案: 
		配置表长(2**15, 2**13, 2**12, 2**15)
	elif "HashFlow:2.0MB" == 内存方案: 
		配置表长(2**15, 2**14, 2**13, 2**15)
	elif "HashFlow:3.0MB" == 内存方案: 
		配置表长(2**16, 2**14, 2**12, 2**15)
	elif "HashFlow:4.0MB" == 内存方案: 
		配置表长(2**16, 2**15, 2**14, 2**16)
	elif "HashFlow:5.0MB" == 内存方案: 
		配置表长(2**16, 2**15, 2**15, 2**17)
	elif "HashFlow:8.0MB" == 内存方案: 
		配置表长(2**17, 2**16, 2**15, 2**17)
	elif "HashFlow:1.0MB:IPv6" == 内存方案: 
		配置表长(2**13, 2**11, 2**11, 2**13)
	elif "HashFlow:2.0MB:IPv6" == 内存方案: 
		配置表长(2**14, 2**12, 2**12, 2**14)
	elif "HashFlow:3.0MB:IPv6" == 内存方案: 
		配置表长(2**14, 2**13, 2**13, 2**16)
	elif "HashFlow:4.0MB:IPv6" == 内存方案: 
		配置表长(2**15, 2**13, 2**13, 2**15)
	elif "HashFlow:5.0MB:IPv6" == 内存方案: 
		配置表长(2**15, 2**14, 2**13, 2**17)
	elif "HashFlow:8.0MB:IPv6" == 内存方案: 
		配置表长(2**16, 2**14, 2**14, 2**16)
	# NetFlow
	elif "NetFlow:1.0MB" == 内存方案:
		配置表长(整数((2**20)/17))
	elif "NetFlow:1.0MB:IPv6" == 内存方案:
		配置表长(整数((2**20)/41))
	# SuperFlow
	elif "SuperFlow:0.25MB" == 内存方案: # AHashFlow; 内存容量为0.25MB
		配置表长(2**14, 2**13, 2**11, 2**14, 2**14)
	elif "SuperFlow:1.0MB" == 内存方案: # AHashFlow; 内存容量为0.25MB
		配置表长(2**16, 2**15, 2**13, 2**16, 2**16)
	elif "SuperFlow:2.0MB" == 内存方案: # AHashFlow; 内存容量为0.25MB
		配置表长(2**17, 2**16, 2**14, 2**17, 2**17)
	elif "SuperFlow:3.0MB" == 内存方案: # AHashFlow; 内存容量为0.25MB
		配置表长(2**18, 2**14, 2**14, 2**18, 2**18)
	elif "SuperFlow:4.0MB" == 内存方案: # AHashFlow; 内存容量为0.25MB
		配置表长(2**18, 2**17, 2**15, 2**18, 2**18)
	elif "SuperFlow:5.0MB" == 内存方案: # AHashFlow; 内存容量为0.25MB
		配置表长(2**18, 2**17, 2**16, 2**19, 2**19)
	elif "SuperFlow:8.0MB" == 内存方案: # AHashFlow; 内存容量为0.25MB
		配置表长(2**19, 2**18, 2**16, 2**19, 2**19)
	# HashPipe
	elif "HashPipe:0.5MB" == 内存方案:
		配置表长(2**10, 2**13, 2**12, 2**11) # HashPipe, 0.25MB
	elif "HashPipe:1.0MB" == 内存方案:
		配置表长(2**11, 2**14, 2**13, 2**12) # HashPipe, 0.25MB
	elif "HashPipe:2.0MB" == 内存方案: # HashPipe, 1.0MB
		配置表长(2**12, 2**15, 2**14, 2**13) 
	elif "HashPipe:3.0MB" == 内存方案: # HashPipe, 1.0MB
		配置表长(2**11, 2**16, 2**14, 2**13) 
	elif "HashPipe:4.0MB" == 内存方案: # HashPipe, 2.0MB
		配置表长(2**13, 2**16, 2**15, 2**14) 
	elif "HashPipe:5.0MB" == 内存方案: # HashPipe, 2.0MB
		配置表长(2**11, 2**17, 2**14, 2**12) 
	elif "HashPipe:8.0MB" == 内存方案: # HashPipe, 2.0MB
		配置表长(2**14, 2**17, 2**16, 2**15) 
	elif "HashPipe:1.0MB:IPv6" == 内存方案:
		配置表长(2**7, 2**13, 2**12, 2**8) # HashPipe, 0.25MB
	elif "HashPipe:2.0MB:IPv6" == 内存方案:
		配置表长(2**8, 2**14, 2**13, 2**9) # HashPipe, 0.25MB
	elif "HashPipe:3.0MB:IPv6" == 内存方案:
		配置表长(2**8, 2**15, 2**12, 2**10) # HashPipe, 0.25MB
	elif "HashPipe:4.0MB:IPv6" == 内存方案:
		配置表长(2**9, 2**15, 2**14, 2**10) # HashPipe, 0.25MB
	elif "HashPipe:5.0MB:IPv6" == 内存方案:
		配置表长(2**12, 2**15, 2**14, 2**13) # HashPipe, 0.25MB
	elif "HashPipe:8.0MB:IPv6" == 内存方案:
		配置表长(2**10, 2**16, 2**15, 2**11) # HashPipe, 0.25MB
	# AHashPipe
	elif "AHashPipe:0.25MB" == 内存方案:
		配置表长(2**11, 2**14, 2**13, 2**11) # AHashPipe, 0.25MB
	# PRECISION
	elif "PRECISION:0.5MB" == 内存方案:
		配置表长(2**13, 2**12, 2**11, 2**10) # PRECISION, 0.25MB
	elif "PRECISION:1.0MB" == 内存方案:
		配置表长(2**14, 2**13, 2**12, 2**11) # PRECISION, 0.25MB
	elif "PRECISION:2.0MB" == 内存方案:
		配置表长(2**15, 2**14, 2**13, 2**12) # PRECISION, 0.25MB
	elif "PRECISION:3.0MB" == 内存方案:
		配置表长(2**16, 2**14, 2**13, 2**11) # PRECISION, 0.25MB
	elif "PRECISION:4.0MB" == 内存方案:
		配置表长(2**16, 2**15, 2**14, 2**13) # PRECISION, 0.25MB
	elif "PRECISION:5.0MB" == 内存方案:
		配置表长(2**17, 2**14, 2**12, 2**11) # PRECISION, 0.25MB
	elif "PRECISION:8.0MB" == 内存方案:
		配置表长(2**17, 2**16, 2**15, 2**14) # PRECISION, 0.25MB
	elif "PRECISION:1.0MB:IPv6" == 内存方案:
		配置表长(2**13, 2**12, 2**8, 2**7) # HashPipe, 0.25MB
	elif "PRECISION:2.0MB:IPv6" == 内存方案:
		配置表长(2**14, 2**13, 2**9, 2**8) # HashPipe, 0.25MB
	elif "PRECISION:3.0MB:IPv6" == 内存方案:
		配置表长(2**15, 2**12, 2**10, 2**8) # HashPipe, 0.25MB
	elif "PRECISION:4.0MB:IPv6" == 内存方案:
		配置表长(2**15, 2**14, 2**10, 2**9) # HashPipe, 0.25MB
	elif "PRECISION:5.0MB:IPv6" == 内存方案:
		配置表长(2**15, 2**14, 2**13, 2**12) # HashPipe, 0.25MB
	elif "PRECISION:8.0MB:IPv6" == 内存方案:
		配置表长(2**16, 2**15, 2**11, 2**10) # HashPipe, 0.25MB
	# Elastic
	elif "Elastic:0.5MB" == 内存方案:
		配置表长(2**13, 2**11, 2**10, 2**14) # Elastic, 0.25MB
	elif "Elastic:1.0MB" == 内存方案:
		配置表长(2**14, 2**12, 2**11, 2**15) # Elastic, 0.25MB
	elif "Elastic:2.0MB" == 内存方案:
		配置表长(2**15, 2**13, 2**12, 2**16) # Elastic, 0.25MB
	elif "Elastic:3.0MB" == 内存方案:
		配置表长(2**16, 2**12, 2**11, 2**15) # Elastic, 0.25MB
	elif "Elastic:4.0MB" == 内存方案:
		配置表长(2**16, 2**14, 2**13, 2**17) # Elastic, 0.25MB
	elif "Elastic:5.0MB" == 内存方案:
		配置表长(2**16, 2**15, 2**14, 2**17) # Elastic, 0.25MB
	elif "Elastic:8.0MB" == 内存方案:
		配置表长(2**17, 2**15, 2**14, 2**18) # Elastic, 0.25MB
	elif "Elastic:1.0MB:IPv6" == 内存方案:
		配置表长(2**13, 2**11, 2**10, 2**13) # Elastic, 0.25MB
	elif "Elastic:2.0MB:IPv6" == 内存方案:
		配置表长(2**14, 2**12, 2**11, 2**14) # Elastic, 0.25MB
	elif "Elastic:3.0MB:IPv6" == 内存方案:
		配置表长(2**14, 2**13, 2**13, 2**16) # Elastic, 0.25MB
	elif "Elastic:4.0MB:IPv6" == 内存方案:
		配置表长(2**15, 2**13, 2**12, 2**15) # Elastic, 0.25MB
	elif "Elastic:5.0MB:IPv6" == 内存方案:
		配置表长(2**15, 2**14, 2**13, 2**15) # Elastic, 0.25MB
	elif "Elastic:8.0MB:IPv6" == 内存方案:
		配置表长(2**16, 2**14, 2**13, 2**16) # Elastic, 0.25MB
	# SpaceSaving
	elif "SpaceSaving:0.25MB" == 内存方案:
		配置表长(15420) # SpaceSaving, 0.25MB
	# CountMin
	elif "CountMin:1.0MB" == 内存方案:
		配置表长(2**16, 2**16, 2**16, 2**16)
	# CountMax
	elif "CountMax:1.0MB" == 内存方案:
		配置表长(2**15, 2**15, 2**15, 2**15)
	# FlowRadar
	elif "FlowRadar:1.0MB" == 内存方案:
		配置表长(2**13, 2**13, 2**12, 2**20)
	elif "FlowRadar:2.0MB" == 内存方案:
		配置表长(2**14, 2**14, 2**13, 2**21)
	elif "FlowRadar:3.0MB" == 内存方案:
		配置表长(2**15, 2**14, 2**14, 2**21)
	elif "FlowRadar:4.0MB" == 内存方案:
		配置表长(2**15, 2**15, 2**14, 2**22)
	elif "FlowRadar:5.0MB" == 内存方案:
		配置表长(2**15, 2**15, 2**15, 2**22)
	elif "FlowRadar:1.0MB:IPv6" == 内存方案:
		配置表长(2**12, 2**12, 2**11, 2**19)
	elif "FlowRadar:2.0MB:IPv6" == 内存方案:
		配置表长(2**13, 2**13, 2**12, 2**20)
	elif "FlowRadar:3.0MB:IPv6" == 内存方案:
		配置表长(2**14, 2**13, 2**13, 2**20)
	elif "FlowRadar:4.0MB:IPv6" == 内存方案:
		配置表长(2**14, 2**14, 2**13, 2**21)
	elif "FlowRadar:5.0MB:IPv6" == 内存方案:
		配置表长(2**14, 2**14, 2**14, 2**21)
	else:
		raise SystemExit("你的内存方案为%s, 该方案不存在." % 内存方案)

###
摘要掩码 = 0x000000ff
指纹掩码 = 0xffffffff
